package 双指针系列;

import java.util.*;
public class FourSum {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> results = new ArrayList<>();
        Arrays.sort(nums);

        for(int i=0;i<nums.length;i++){
            if(i > 0 && nums[i] == nums[i-1]){
                continue;
            }

            for(int j = i+1; j<nums.length;j++){
                if(j > i+1 && nums[j] == nums[j-1]){
                    continue;
                }

                int left = j + 1;
                int right= nums.length-1;
                while (left<right){
                    int sum = nums[i] + nums[j] +nums[left] + nums[right];

                    if(sum<target){
                        left++;
                    }else if(sum>target){
                        right--;
                    }else {
                        results.add(Arrays.asList(nums[i],nums[j],nums[left],nums[right]));

                        while (left < right && nums[left] == nums[left+1]) left++;
                        while (left < right && nums[right] == nums[right-1]) right--;

                        left++;
                        right--;
                    }
                }

            }
        }
        return results;
    }
}
